package ar.uba.fi.celdas7568.ciudad.heuristicas;


import java.util.Iterator;
import java.util.List;

import com.google.common.collect.Lists;

import ar.uba.fi.celdas7568.ciudad.Opinion;
import ar.uba.fi.celdas7568.ciudad.OpinionZona;
import ar.uba.fi.celdas7568.ciudad.Personalidad;
import ar.uba.fi.celdas7568.ciudad.Zona;

public class Heuristica implements HeuristicaDeDecision {

	public Opinion evaluarZona(Zona zona, Personalidad personalidad) {
		OpinionZona opinion = new OpinionZona();
		
		opinion.generarOpinion(zona, personalidad);
		
		return opinion;
	}

	public Zona evaluarOpiniones(List<Opinion> opiniones,
			Personalidad personalidad) {
		List<OpinionZona> opinionesFavorables = Lists.newArrayList();
		
		OpinionZona opinionMenosDesfavorable = null;
		
		Iterator<Opinion> itOpinion = opiniones.iterator();
		while(itOpinion.hasNext()){
			OpinionZona opinion = (OpinionZona)itOpinion.next();
			if((opinion.cantidadDisidenciasImprescincibles==0)&&(opinion.cantidadCoincidenciasInadmisibles == 0)){
				opinionesFavorables.add(opinion);
			}else{
				opinionMenosDesfavorable = OpinionZona.obtenerMejorOpinionDesfavorable(opinionMenosDesfavorable,opinion);
			}
		}
		OpinionZona mejorOpinion = null;
		if(!opinionesFavorables.isEmpty()){
			Iterator<OpinionZona> itOpFavorables= opinionesFavorables.iterator();
			while(itOpFavorables.hasNext()){
				OpinionZona opinion = itOpFavorables.next();
				mejorOpinion = OpinionZona.obtenerMejorOpinion(mejorOpinion,opinion);
					
				}
		}else{
			opinionMenosDesfavorable.modificarPersonalidad(personalidad);
		}
		if(mejorOpinion!=null)
			return mejorOpinion.getZona();
		
		return null;
	}

	
	
}
